package database

import (
	"github.com/pkg/errors"
	"github.com/spf13/viper"
	"gorm.io/driver/mysql"
	"gorm.io/gorm"
	"time"
)

var MysqlDB *gorm.DB

type Options struct {
	URL             string `yaml:"url"`
	Debug           bool
	MaxIdleConns    int           // 设置空闲时的最大连接数
	MaxOpenConns    int           // 设置与数据库的最大打开连接数
	ConnMaxLifetime time.Duration // 每一个连接的生命周期等信息
}

func NewOptions(v *viper.Viper) (*Options, error) {
	var (
		err error
		o   = new(Options)
	)
	if err = v.UnmarshalKey("db.mysql", o); err != nil {
		return nil, errors.Wrap(err, "解析mysql配置失败")
	}
	return o, nil
}

// 实例化mysql
func NewMysql(o *Options) error {
	db, err := gorm.Open(mysql.Open(o.URL), &gorm.Config{})
	if err != nil {
		return err
	}
	sqlDB, err := db.DB()
	if err != nil {
		return err
	}
	sqlDB.SetMaxIdleConns(o.MaxIdleConns)
	sqlDB.SetMaxOpenConns(o.MaxOpenConns)
	sqlDB.SetConnMaxLifetime(o.ConnMaxLifetime)
	MysqlDB = db

	return nil
}
